package com.yzqp.common.util;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.springframework.util.StringUtils;

import java.util.Map;

/**
 * 阿里巴巴fastJson工具类
 */
public class FastJsonUtil {

    /**
     * 通过属性值，来获取该字段的json字符串
     *
     * @param jsonString json字符串
     * @param property   属性值
     * @return
     */
//    public static String getStringByKey(String jsonString, String property) {
//        if (StringUtils.isEmpty(jsonString) || StringUtils.isEmpty(property)) {
//            throw new GlobalRuntimeException("请传入正确的参数");
//        }
//        JSONObject jsonObject = JSON.parseObject(jsonString);
//        String returnValue = jsonObject.get(property).toString();
//        return returnValue;
//    }

    /**
     * json字符串转换为map
     *
     * @param jsonString json字符串
     * @return
     */
    public static Map<String, Object> stringToMap(String jsonString) {
        Map<String, Object> map = (Map<String, Object>) JSON.parse(jsonString);
        return map;
    }

    /**
     * @param jsonString json字符串
     * @param classType  要转换成的类类型
     * @return
     */
    public static Object stringToObject(String jsonString, Class classType) {
        Object object = JSON.parseObject(jsonString, classType);
        return object;
    }

    /**
     * 把对象转化为json字符串
     *
     * @param object 要转化的对象
     * @return
     */
    public static String objectToString(Object object) {
        if (StringUtils.isEmpty(object)) {
            return null;
        }
        String s = JSON.toJSONString(object);
        return s;
    }

    /**
     * map 转换 对象
     *
     * @param map
     * @param clazz
     * @return
     */
    public static <T> T mapToObject(Map<String, Object> map, Class clazz) {
        return (T) JSON.parseObject(JSON.toJSONString(map), clazz);
    }

    /**
     * map 转换 json字符串
     *
     * @param map
     * @return
     */
    public static String mapToString(Map map) {
        String res = JSON.toJSONString(map);
        return res;
    }

    /**
     * 复制对象到新的类型
     *
     * @param oldObject 原始对象
     * @param clazz
     * @return
     */
    public static Object copyToObject(Object oldObject, Class clazz) {
        if(oldObject == null){
            return null;
        }
        JSONObject jsonObject = (JSONObject) JSON.toJSON(oldObject);
        Object newObject = JSON.parseObject(jsonObject.toJSONString(), clazz);
        return newObject;
    }

}
